﻿#include<iostream>
using namespace std;

//#define ADD(int x, int y) {return x + y;}
//#define ADD(x, y) x + y
//#define ADD(x, y) (x + y)
//#define ADD(x, y) (x) + (y)
//#define ADD(x, y) ((x) + (y));

//#define ADD(x, y) ((x) + (y))
//
//int main()
//{
//	// 不能加分号
//	if (ADD(1,2))
//	{}
//
//	// 外层括号
//	ADD(1, 2) * 3;
//
//	// 里面括号
//	int a = 1, b = 2;
//	ADD(a|b, a&b);
//
//	return 0;
//}

// 
inline int Add(int x, int y)
{
	return x + y;
}

inline int func(int x, int y)
{
	int ret = x + y;
	ret = x + y;
	ret = x + y;
	ret = x / y;
	ret += x + y;
	ret = x + y;
	ret -= x + y;
	ret = x + y;
	ret = x * y;
	ret = x + y;
	ret = x + y;
	return ret;
}

//int main()
//{
//	int ret = Add(1, 3);
//	cout << ret << endl;
//	ret = func(10, 20);
//	cout << ret << endl;
//
//	return 0;
//}

//#include "Stack.h"
////int func1();
//
//int main()
//{
//	int ret = func1(); 
//
//	cout << ret << endl;
//}

//int main()
//{
//	int x = 10;
//	auto a = &x;
//	auto* b = &x;
//	auto& c = x; // int& c = x;
//
//	cout << typeid(a).name() << endl;
//	cout << typeid(b).name() << endl;
//	cout << typeid(c).name() << endl;
//
//
//	int array[] = { 1, 2, 3, 4, 5 };
//
//	for (auto& x : array)
//	{
//		x *= 2;
//	}
//
//	//for (auto e : array)
//	for (int e : array)
//		cout << e << " ";
//	cout << endl;
//
//	return 0;
//}

/*
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif
*/

void f(int)
{
	cout << "f(int)" << endl;
}

void f(int*)
{
	cout << "f(int*)" << endl;
}

//int main()
//{
//	f(0);
//	f(NULL);
//	f(nullptr);
//
//	return 0;
//}

// 属性 + 方法
// struct 升级
// 1、兼容c中struct 的所有用法
// 2、升级成了类

//typedef int DataType;
//struct Stack
//{
//	// 成员函数/成员方法
//	void Init(size_t capacity)
//	{
//		_array = (DataType*)malloc(sizeof(DataType)* capacity);
//		if (nullptr == _array)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//
//		_capacity = capacity;
//		_size = 0;
//	}
//
//	void Push(const DataType& data)
//	{
//		// 扩容
//		_array[_size] = data;
//		++_size;
//	}
//
//	DataType Top()
//	{
//		return _array[_size - 1];
//	}
//
//	void Destroy()
//	{
//		if (_array)
//		{
//			free(_array);
//			_array = nullptr;
//			_capacity = 0;
//			_size = 0;
//		}
//	}
//
//	// 成员变量
//	DataType* _array;
//	size_t _capacity;
//	size_t _size;
//};
//
////void StackInit(struct Stack* ps, size_t capacity)
////{
////	ps->_array = (DataType*)malloc(sizeof(DataType)* capacity);
////	// ..
////}
//
//typedef struct Queue
//{
//	// ...
//}Q;
//
//void QueueInit(Q* pq)
//{}
//void QueuePush(Q* pq, int x);
//
//// C++
//struct ListNode
//{
//	ListNode* next;
//};

//int main()
//{
//	Stack s;
//	s.Init(10);
//	s.Push(1);
//	s.Push(2);
//	s.Push(3);
//	cout << s.Top() << endl;
//	s.Destroy();
//	
//	// 兼容C语言中对结构体的用法
//	Q q1;
//	struct Queue q2;
//	QueueInit(&q1);
//
//	// C++
//	Queue q3;
//
//
//	return 0;
//}

//struct Stack
//class Stack
//{
//private:
//	int* a;
//	int top;
//	int capacity;
//
//public:
//	void Init(int N = 4)
//	{
//		// ...
//		top = 0;
//		capacity = 0;
//	}
//
//	void Push(int x)
//	{
//		//...
//	}
//
//};
//
//int main()
//{
//	Stack st;
//	st.Init();
//	st.Push(1);
//	st.Push(2);
//	st.Push(3);
//	st.Push(4);
//
//	// error C2248: “Stack::top”: 无法访问 private 成员(在“Stack”类中声明)
//	// st.top;
//
//
//	return 0;
//}

////////////////////////////////////////////////////////////////////////
//class Stack // 类型
//{
//public:
//	void Push(int x)
//	{
//		// Init();
//		//...
//	}
//
//	void Init(int N = 4)
//	{
//		// ...
//		top = 0;
//		capacity = 0;
//	}
//
//private:
//	int* a;  // 声明
//	int top;
//	int capacity;
//};
//
//struct Stack_C // 类型
//{
//	int* a;    // 声明 
//	int top;
//	int capacity;
//};
//
//int main()
//{
//	//Stack::a = 0;
//	//Stack_C::a = 0;
//
//	//Stack st;
//	//st.a = 0;
//
//	return 0;
//}

//#include "Stack.h"

//class Date
//{
//public:
//	void Init(int year, int month, int day)
//	{
//		year = year;
//		month = month;
//		day = day;
//	}
//private:
//	int year;
//	int month;
//	int day;
//};

class Date
{
public:
	void Init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year; // year_  m_year  mYear
	int _month;
	int _day;
};

int main()
{
	//Stack st1;
	//Stack st2;

	Date d1;
	d1.Init(2022, 9, 19);

	return 0;
}